# coding:utf-8
"""
Author: 11203
Date:  21:44
Name: user
User相关模型类
"""
from datetime import datetime

from werkzeug.security import generate_password_hash, check_password_hash

from common.models import db


# User用户模型类
class User(db.Model):
    # 映射表名: t_user
    __tablename__ = 't_user'

    # 主键（大整型，主键，自增）
    id = db.Column(db.BIGINT, primary_key=True, autoincrement=True, doc='主键ID')
    # 头像
    icon = db.Column(db.String(5000), doc='头像')
    # EMAIL邮箱地址
    email = db.Column(db.String(64), doc='EMAIL邮箱地址')
    # 昵称
    nick_name = db.Column(db.String(200), doc='昵称')
    # 签名
    note = db.Column(db.String(256), doc='签名')
    # 手机号码
    phone = db.Column(db.String(16), doc='手机号码')
    # 账户名
    username = db.Column(db.String(64), doc='账户名')
    # 账户密码: 存储的加密之后的密文，采用flask提供的hash算法
    password = db.Column(db.String(148), doc='账户密码')
    # 最后一次登录时间
    login_time = db.Column(db.DateTime, default=datetime.now(), doc='最后一次登录时间')
    # 创建时间（默认当前时间）
    create_time = db.Column(db.DateTime, default=datetime.now(), doc='创建时间')
    # 修改时间（当修改时数据时，自动设置当前时间）
    update_time = db.Column(db.DateTime, default=datetime.now(), onupdate=datetime.now(), doc='修改时间')
    # 记录状态（默认值：1（可用）0（冻结））
    status = db.Column(db.Integer, doc='记录状态', default=int(1))
    # 删除标记（默认值：0（未删除）1（已删除））
    is_delete = db.Column(db.Integer, doc='删除标记', default=int(0))

    # 加密过的密码
    @property
    def pwd(self):
        return self.password

    @pwd.setter
    def pwd(self, pwd: str) -> str:
        """
        根据明文的密码，转为密文（摘要算法处理）
        :param pwd: 明文密码
        :return:
        """
        # flask 自带的加密函数
        x_pwd = generate_password_hash(pwd)  # hash加密处理
        self.password = x_pwd

    @pwd.getter
    def pwd(self):
        return self.password


    def check_pwd(self, pwd: str):
        """
        登录时，校验密码
        :param pwd: 明文密码
        :param x_pwd: 转换的密码
        :return: 是否相等
        """
        return check_password_hash(self.password, pwd)
